package com.wgh.product.mapper;

import com.wgh.product.entity.shop.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 商品Mapper接口
 * 
 * @author AI Shop
 */
@Mapper
public interface ProductMapper extends BaseMapper<Product> {

    /**
     * 分页查询商品列表
     * 
     * @param params 查询参数
     * @return 商品列表
     */
    List<Product> selectProductPage(@Param("params") Map<String, Object> params);

    /**
     * 根据ID查询商品详情，包含关联信息
     * 
     * @param id 商品ID
     * @return 商品详情
     */
    Product selectProductDetailById(@Param("id") Long id);

    /**
     * 根据商品编号查询商品
     * 
     * @param productCode 商品编号
     * @return 商品信息
     */
    Product selectByProductCode(@Param("productCode") String productCode);

    /**
     * 批量更新商品状态
     * 
     * @param ids 商品ID列表
     * @param status 状态
     * @return 影响行数
     */
    int updateStatusBatch(@Param("ids") List<Long> ids, @Param("status") Integer status);

    /**
     * 批量更新商品价格
     * 
     * @param ids 商品ID列表
     * @param salePrice 销售价格
     * @return 影响行数
     */
    int updatePriceBatch(@Param("ids") List<Long> ids, @Param("salePrice") java.math.BigDecimal salePrice);

    /**
     * 批量更新商品库存
     * 
     * @param ids 商品ID列表
     * @param totalStock 总库存
     * @return 影响行数
     */
    int updateStockBatch(@Param("ids") List<Long> ids, @Param("totalStock") Integer totalStock);

    /**
     * 根据分类ID查询商品数量
     * 
     * @param categoryId 分类ID
     * @return 商品数量
     */
    @Select("SELECT COUNT(*) FROM shop_product WHERE category_id = #{categoryId} AND del_flag = 0")
    int countByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 根据品牌ID查询商品数量
     * 
     * @param brandId 品牌ID
     * @return 商品数量
     */
    @Select("SELECT COUNT(*) FROM shop_product WHERE brand_id = #{brandId} AND del_flag = 0")
    int countByBrandId(@Param("brandId") Long brandId);

    /**
     * 商品搜索
     * 
     * @param keyword 搜索关键词
     * @return 商品列表
     */
    List<Product> searchProducts(@Param("keyword") String keyword);

    /**
     * 更新商品浏览量
     * 
     * @param id 商品ID
     * @param increment 增量
     * @return 影响行数
     */
    int updateViewCount(@Param("id") Long id, @Param("increment") Integer increment);

    /**
     * 更新商品收藏量
     * 
     * @param id 商品ID
     * @param increment 增量
     * @return 影响行数
     */
    int updateCollectCount(@Param("id") Long id, @Param("increment") Integer increment);

    /**
     * 更新商品销售量
     * 
     * @param id 商品ID
     * @param increment 增量
     * @return 影响行数
     */
    int updateSaleCount(@Param("id") Long id, @Param("increment") Integer increment);
}